iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0
SideProject30

Java Spring + Vue 甘苦學習路 前後端分離之 Blog 實戰系列 第 7

Day 7 Java Spring API 建立 — 根據 id 撈出文章功能

  • 分享至 

  • xImage
  •  

概述

上一篇主要實作列出所有資料的 API,不過撈取資料時,使用關鍵字或是序號來找尋也是很常見的,所以今天將會實作如何透過 id 來撈取到對應的資料內容~

資料邏輯處理 - Service 層

return type of the method is PostDto and the method is getPostById()

PostService.java

PostDto getPostById(long id);

PostServiceimpl.java

這邊使用 ResourceNotFoundException() 來處理當找不到該 id 的值的狀況

public PostDto getPostById(long id) { // lambda expression to implement function supplier

        Post post = postRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException("Post","id",id));
        return mapToDTO(post);
    }

以上這樣會出錯,因為 ResourceNotFoundException() 在宣告時給的參數型態是 String 不是 long。

解決方法:

改 ResourceNotFoundException() 這個 function 的參數 type,可以雙擊這個 function,就會連到 function 建立的地方,再將有 fieldValue 的宣告或是呼叫的 type 改成 long

可以參考:

public class ResourceNotFoundException extends RuntimeException{
    private String resourceName;
    private String fieldName;
// Change for the type
    private long filedValue;
    // Create Constructor
// Change for the type
    public ResourceNotFoundException(String resourceName, String fieldName, long filedValue) {
        super(String.format("%s Can't find %s: '%%",resourceName,fieldName,filedValue));
        this.resourceName = resourceName;
        this.fieldName = fieldName;
        this.filedValue = filedValue;
    }
    // 建立 Getter and Setter
    public String getResourceName() {
        return resourceName;
    }

    public String getFieldName() {
        return fieldName;
    }
    // Change for the type
    public long getFiledValue() {
        return filedValue;
    }
}

這樣就不會出錯了喔~

此外,也要記得 import com.spring.blog.exception.ResourceNotFoundException;

API 路徑對應 - Controller 層

在 Controller 層建立 API 的 url path

PostController.java

@GetMapping("/{id}")
    public ResponseEntity<PostDto> getPostById(@PathVariable(name="id") long id){
        return ResponseEntity.ok(postService.getPostById(id));
    }

API Test — Postman

使用 http://localhost:8080/api/posts/1,並選擇 GET 的方式,按下 send 後就會顯示出資料的喔~

除了新增、查詢等功能外,常見的還有更新資料的使用,明天將會介紹如何使用 REST API 來 update 資料~

若文中有錯誤之處還請多多包涵與指正,也歡迎在文章下方留言討論!

明天見~


上一篇
Day 6 Java Spring API 之資料系統建構 — 撈出文章功能
下一篇
Day 8 Java Spring API 建立 — 更新 Post 的 API
系列文
Java Spring + Vue 甘苦學習路 前後端分離之 Blog 實戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言